#ifndef  _MY_CONFIG_
#define  _MY_CONFIG_
#include<mutex>
#include"util.hpp"
namespace cloud {
    using namespace std;
    #define CONFIG_FILE "./cloud.conf"
    class Config{
        private :
            Config(){//构造函数
                ReadConfigFile();//加载配置文件内容
            }
            static Config *_instance;
            static std::mutex _mutex;
        private:
            int _hot_time;
            int _server_port;
            std::string _download_prefix;
            std::string _server_ip;
            std::string _packfile_suffix;
            std::string _pack_dir;
            std::string _back_dir;
            std::string _backup_file;
            bool ReadConfigFile(){
                FileUtil fu(CONFIG_FILE);
                string body;
                if(fu.GetContent(&body) == false){
                    cout<<"load config file falied!\n";
                    return false;
                }
                Json::Value root;
                if(JsonUtil::UnSerialize(body, &root) == false){
                    cout<<"parse config file failed!\n";
                    return false;
                }
                _hot_time = root["hot_time"].asInt();
                _server_port = root["server_port"].asInt();
                _server_ip = root["server_ip"].asString();
                _download_prefix = root["download_prefix"].asString();
                _packfile_suffix = root["packfile_suffix"].asString();
                _pack_dir = root["pack_dir"].asString();
                _back_dir = root["back_dir"].asString();
                _backup_file = root["backup_file"].asString();
            }
        public:
            static Config * GetInstance(){//获取操作句柄
                if(_instance == NULL){
                if(_instance == NULL){
                    _instance = new Config();
                }
                _mutex.unlock();
                }
                return _instance;
            }
            int GetHotTime(){
                return _hot_time;
            }
            int GetServerPort(){
                return _server_port;
            }
            string GetServerIp(){
                return _server_ip;
            }
            string GetDownloadPrefix(){
                return _download_prefix;
            }
            string GetPackFileSuffix(){
                return _packfile_suffix;
            }
            string GetPackDir(){
                return _pack_dir;
            }
            string GetBackDir(){
                return _back_dir;
            }
            string GetBackupFile(){
                return _backup_file;
            }

    };
    Config * Config::_instance =NULL;
    mutex Config::_mutex;

}

#endif